const BASE_URL = "http://127.0.0.1:8098/chat-server"

/** 
 * 请求白名单
 */
const whiteUrls = [
	'/login',
	'/register'
]

/** 
 * 拦截器操作
 */
let interceptorOpt = {
	invoke(args) {
		// 非请求白名单需要携带token
		let flag = false
		whiteUrls.forEach(wu => {
			if (args.url.includes(wu)) {
				flag = true
			}
		})
		if (!flag) {
			try {
				const token = 'Bearer ' + uni.getStorageSync('token')
				args.header = {
					Authorization: token
				}
			} catch(e) {
				
			}
		}
	}
}


/** 
 * 添加拦截器
 */
uni.addInterceptor('request', interceptorOpt)
uni.addInterceptor('uploadFile', interceptorOpt)

/** 
 * 发起普通网络请求
 */
const http = (url, method, data) => {
	if (!method) {
		method = 'GET'
	}
	method = method.toUpperCase()
	let res = new Promise((resolve, reject) => {
		let options = {
			url: BASE_URL + url,
			method,
			withCredentials: false,
			timeout: 3000,
			data,
			success: resp => {
				if (resp.statusCode === 200) { 		  // 请求成功 
					// 业务逻辑状态码判断
					if (resp.data.code === 200) {
						
					} else if (resp.data.code === 500) {
						uni.showToast({
							title: resp.data.message,
							icon: "error"
						})
					} else {
						uni.showToast({
							title: '系统未知错误',
							icon: "error"
						})
					}
				} else if (resp.statusCode === 404) { // 页面找不到
					uni.showToast({
						title: '功能未开发!',
						icon: "error"
					})
				} else if (resp.statusCode === 500) { // 服务器错误
					uni.showToast({
						title: '服务错误!',
						icon: "error"
					})
				} else if(resp.statusCode === 403) { // 未授权
					uni.showToast({
						title: '无权限!',
						icon: "error"
					})
				}  else if (resp.statusCode === 401) { // 未登录
					uni.showToast({
						title: '请登录',
						icon: "error"
					})
				} else {
					uni.showToast({
						title: '未知错误!',
						icon: "error"
					})
				}
				resolve(resp.data)
			},
			fail: resp => {
				uni.showToast({
					title: '服务器错误！',
					icon: "error"
				})
				reject(resp)
			}
		}
		uni.request(options)
	})
	return res
}

/** 
 * 一次只上传一个文件
 */
const upload = (url, filePath, formData) => {
	return new Promise((resolve, reject) => {
		uni.uploadFile({
			url: BASE_URL + url,
			filePath,
			name: 'file',
			formData,
			success: resp => {
				let data
				if (resp.statusCode === 200) { 		  // 请求成功
					data = JSON.parse(resp.data)
					// 业务逻辑状态码判断
					if (data.code === 200) {
						
					} else if (data.code === 500) {
						uni.showToast({
							title: '上传失败',
							icon: "error"
						})
					} else {
						uni.showToast({
							title: '系统未知错误',
							icon: "error"
						})
					}
				} else if (resp.statusCode === 404) { // 页面找不到
					uni.showToast({
						title: '功能未开发!',
						icon: "error"
					})
				} else if (resp.statusCode === 500) { // 服务器错误
					uni.showToast({
						title: '服务错误!',
						icon: "error"
					})
				} else if(resp.statusCode === 403) { // 未授权
					uni.showToast({
						title: '无权限!',
						icon: "error"
					})
				}  else if (resp.statusCode === 401) { // 未登录
					uni.showToast({
						title: '请登录',
						icon: "error"
					})
				} else {
					uni.showToast({
						title: '未知错误!',
						icon: "error"
					})
				}
				resolve(data)
			},
			fail: resp => {
				uni.showToast({
					title: '服务器错误！',
					icon: "error"
				})
				reject(resp)
			}
		})
	})
}

/** 
 * 一次上传多个文件
 * files: [{name: '', uri: ''}]
 */
const uploadMulti = (url, filePath, files, formData) => {
	return new Promise((resolve, reject) => {
		uni.uploadFile({
			url: BASE_URL + url,
			files,
			formData,
			success: resp => {
				let data
				if (resp.statusCode === 200) { 		  // 请求成功
					// 业务逻辑状态码判断
					data = JSON.parse(resp.data)
					if (data.code === 200) {
						
					} else if (data.code === 500) {
						uni.showToast({
							title: '上传失败',
							icon: "error"
						})
					} else {
						uni.showToast({
							title: '系统未知错误',
							icon: "error"
						})
					}
				} else if (resp.statusCode === 404) { // 页面找不到
					uni.showToast({
						title: '功能未开发!',
						icon: "error"
					})
				} else if (resp.statusCode === 500) { // 服务器错误
					uni.showToast({
						title: '服务错误!',
						icon: "error"
					})
				} else if(resp.statusCode === 403) { // 未授权
					uni.showToast({
						title: '无权限!',
						icon: "error"
					})
				}  else if (resp.statusCode === 401) { // 未登录
					uni.showToast({
						title: '请登录',
						icon: "error"
					})
				} else {
					uni.showToast({
						title: '未知错误!',
						icon: "error"
					})
				}
				resolve(data)
			},
			fail: resp => {
				uni.showToast({
					title: '服务器错误！',
					icon: "error"
				})
				reject(resp)
			}
		})
	})
}


/** 
 * 定义net插件
 */
export const net =  {
	install(Vue, options) {
		Vue.prototype.$http = http
		Vue.prototype.$upload = upload
		Vue.prototype.$uploadMulti = uploadMulti
	}
}
